package view.actions;

import beans.DocCabeceraTo;
import beans.GeneralTo;
import beans.ProductoTo;
import beans.UsuarioTo;
import java.io.IOException;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import negocio.GeneralManager;
import negocio.GeneralManagerException;
import negocio.ProductoManager;
import negocio.ProductoManagerException;
import negocio.UsuarioManager;
import negocio.UsuarioManagerException;

import negocio.VentasManager;
import negocio.VentasManagerException;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import utildb.Fecha;
import utildb.TransactionException;
import view.forms.realizarCompraForm;

public class RealizarCompraAction extends Action {
    private static java.sql.Date dFecActual;
    String cBuscar;
    String cadentmp;
    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request, 
                                 HttpServletResponse response) throws IOException, 
                                                                      ServletException, 
                                                                      VentasManagerException,
                                                                      TransactionException,
                                                                      UsuarioManagerException,
                                                                      GeneralManagerException {
        //      --------
        VentasManager pmg = new VentasManager();
        HttpSession session  = request.getSession(false);

        // NEGOCIO
        UsuarioManager mgrUser = new UsuarioManager();
        ProductoManager mgrProd = new ProductoManager();
        GeneralManager mgrGral = new GeneralManager();

        int nIniForward = 0;

        realizarCompraForm objform;
        objform = (realizarCompraForm) form;
        String operacion = objform.getOperacion();
        String ccod_prod = objform.getCcod_prod();
        String cruc_prov = objform.getCruc_prov();
        //
        if (operacion == null || operacion.equals("llamadamenu")) {
            ArrayList oProductosCarrito = (ArrayList)session.getAttribute("productosCarrito");
            if (oProductosCarrito!=null) {
                objform.setProductosSeleccionados(oProductosCarrito);
                request.setAttribute("productosCarrito", oProductosCarrito );
                request.setAttribute("productosSeleccionados", oProductosCarrito );
            }
            nIniForward = 1;
        }

        // BORRAR UN PRODUCTO LA COMPRA
        if (operacion != null && operacion.equals("borrar_producto")) {
            ArrayList oProdCarrito = (ArrayList)session.getAttribute("productosCarrito");
            ArrayList oNuevaLista = new ArrayList();
            if (1==1) {
                for (Iterator it = oProdCarrito.iterator(); it.hasNext();) {
                    ProductoTo to = (ProductoTo) it.next();
                    String cCodProd1 = to.getCcod_Prod();
                    String cRucProv1 = to.getCruc_Prov();
                    if (cCodProd1.equals(ccod_prod) && cRucProv1.equals(cruc_prov)) {
                        cRucProv1 = "";
                    } else {
                       oNuevaLista.add(to);
                    }
                }
                // Actualizar
                    // HALLAR EL IGV
                    GeneralTo oGeneral = new GeneralTo();
                    double nPorIGV = 0;
                    try {
                        oGeneral = mgrGral.getGeneral();
                        nPorIGV = oGeneral.getnPor_IGV();
                    } catch (GeneralManagerException ex) {
                        Logger.getLogger(InicialAction.class.getName()).log(Level.SEVERE, null, ex);
                    }

                    int cantidad = oNuevaLista.size();
                    double subTot = 0;
                    double monIGV = 0;
                    double monTot = 0;
                    for (Iterator it = oNuevaLista.iterator(); it.hasNext();) {
                        ProductoTo to = (ProductoTo) it.next();
                        subTot = subTot + (to.getNpre_Vent() * to.getNcan_Vent());
                    }
                    monIGV = subTot * (nPorIGV/100);
                    monTot = subTot + monIGV;

                    objform.setProductosSeleccionados(oNuevaLista);
                    objform.setOperacion("ejecutarbuscar");
                    session.setAttribute("productosCarrito",oNuevaLista);

                    //
                    request.setAttribute("operacion", "ejecutarbuscar" );
                    request.setAttribute("productosSeleccionados", oNuevaLista );
                    request.setAttribute("numeroProductos", cantidad );
                    request.setAttribute("subTotal", subTot );
                    request.setAttribute("montoIGV", monIGV );
                    request.setAttribute("montoTotal", monTot );
                    nIniForward = 1;
            }
        }


        // GRABAR LA COMPRA
        if (operacion != null && operacion.equals("saveCompra")) {
           dFecActual = Fecha.getFechaActual();
           String txtUser = (String)session.getAttribute("txtUser");
           double subTot = 0;
           double monIGV = 0;
           double monTot = 0;
                // HALLAR EL IGV
                GeneralTo oGeneral = new GeneralTo();
                double nPorIGV = 0;
                try {
                    oGeneral = mgrGral.getGeneral();
                    nPorIGV = oGeneral.getnPor_IGV();
                } catch (GeneralManagerException ex) {
                    Logger.getLogger(InicialAction.class.getName()).log(Level.SEVERE, null, ex);
                }

                // Obtener datos del cliente
                UsuarioTo objUser = new UsuarioTo();
                objUser = mgrUser.buscarUsuario(txtUser);
                
           // Almacenar varlos en el objeto
           DocCabeceraTo oDocuCab = new DocCabeceraTo();
           // setear datos
           oDocuCab.setcCod_Usua(txtUser);
           oDocuCab.setcRuc_Clie(objUser.getCruc_Usua());
           oDocuCab.setcNom_Clie(objUser.getCnom_Usua());
           oDocuCab.setcTip_Mone_Vent("003001");
           oDocuCab.setcEst_Docu("1");
           oDocuCab.setdFec_Vent( dFecActual );
           oDocuCab.setcLug_Entr_Merc("En Chorrillos");
           oDocuCab.setcHor_Entr_Merc("A las 20 horas");
//          oDocuCab.setdFec_Entr_Merc(fecActual);
           oDocuCab.setcHor_Entr_Merc("20");
           oDocuCab.setcPer_Cont_Merc("Contacto");
           oDocuCab.setcTel_Pers_Cont("123456789");
                
           // ALMACENAR DETALLE
           ArrayList oProductos = new ArrayList();
           for (Iterator it = objform.getProductosSeleccionados().iterator(); it.hasNext();) {
                    ProductoTo oProd = (ProductoTo) it.next();

                    double npreVenta = oProd.getNpre_Vent();
                    double ncanVenta = oProd.getNcan_Vent();
                    double totProd = npreVenta * ncanVenta;
                    subTot = subTot + ( npreVenta * ncanVenta);
                    oProd.setTot_produ(totProd);
                    oProductos.add( oProd );
           }
           monIGV = subTot * (nPorIGV/100);
           monTot = subTot + monIGV;
           oDocuCab.setnSub_Tota_Vent( subTot );
           oDocuCab.setnImp_IGV( monIGV );
           oDocuCab.setnTot_Vent( monTot );

           // AHORA GRABAR
           VentasManager mgrVtas = new VentasManager();
           mgrVtas.grabarNewVenta(oDocuCab, oProductos );
            
                // LIMPIA LOS DATOS
                objform.setProductosSeleccionados(null);
                session.setAttribute("productosCarrito",null);
                request.setAttribute("numeroProductos", 0 );
                request.setAttribute("subTotal", 0 );
                request.setAttribute("montoIGV", 0 );
                request.setAttribute("montoTotal", 0 );
                request.setAttribute("listaProductos", null );
                objform.setProd_sele(null);
                nIniForward = 2;
        }
        if (nIniForward ==1) {
          return mapping.findForward( "pgnMiCarrito");
        } else {
          return mapping.findForward( "pgnBuscarProductos");
        }
    }
}
